#ifndef STRATEGY_H
#define STRATEGY_H
#include <QtGlobal>
#include <QVector>
// K线数据结构
struct CandleData {
    qint64 timestamp; // 时间戳(毫秒)
    double open;      // 开盘价
    double high;      // 最高价
    double low;       // 最低价
    double close;     // 收盘价
    double volume;    // 成交量
};

// 交易记录结构
struct TradeRecord {
    enum TradeType { BUY, SELL } type;
    qint64 timestamp;
    double price;
    double amount;
    double total;
    double balance;
    double profit;
};


class Strategy
{
public:
    Strategy();
    virtual ~Strategy() = default;
    virtual void init(double initialBalance);
    virtual void setFee(double fee);//设置资金费率
    virtual void onCandle(const CandleData& candle) = 0;
    virtual const QVector<TradeRecord>& getTrades() const { return m_trades; }
    virtual double getFinalBalance() const { return m_balance + m_holdings * m_lastPrice; }
    virtual double getTotalReturn() const {
        return (getFinalBalance() - m_initialBalance) / m_initialBalance * 100.0;
    }

protected:
    double m_balance = 0.0;        // 现金余额
    double m_holdings = 0.0;       // 持有资产数量
    double m_lastPrice = 0.0;      // 最后价格
    double m_initialBalance = 0.0; // 初始资金
    QVector<TradeRecord> m_trades; // 交易记录
    double m_fee=0.001;                  //资金费率，用于计算收益

    // 买入操作
    virtual void buy(const CandleData& candle, double amount);

    // 卖出操作
    virtual void sell(const CandleData& candle, double amount = -1);
};

#endif // STRATEGY_H
